const path = require('path');
var fs = require('fs');
var tools = require('../tools');
var config = require('../config');
var shortid = require('shortid');
var id = shortid.generate().toLocaleLowerCase();

function zeroFill(num) {
  return num > 9 ? num : ('0' + num)
}

/**
 *
 * @param {date} date
 * @returns
 */
function dateFormat() {
  const date = new Date();
  return date.getFullYear() + '-'
    + zeroFill(date.getMonth() + 1) + '-'
    + zeroFill(date.getDate()) + ' '
    + zeroFill(date.getHours()) + ':'
    + zeroFill(date.getMinutes()) + ':'
    + zeroFill(date.getSeconds()) + '.'
    + date.getMilliseconds();
}

/**
 * 按时间分割日志文件
 * 默认分割 4小时
 * @param {*} date
 * @param {*} type // YYYY-MM-DD, YYYY-MM-DD-hh
 * @returns
 */
function formatFileName(date, type) {
  return type + '-' + date.getFullYear() + '-' + (date.getMonth()+1) + '-' + date.getDate() + '-' + parseInt(date.getHours() / 4) * 4 + id + '.log'
}

/**
 * 写入文件目录
 *
 * @param {*} env
 * @param {*} type
 * @param {*} id
 * @param {*} date
 * @returns
 */
function logFile(env, type, id, date) {
  // 创建文件夹
  var logPath = path.join(config.logsPath, env, id);
  tools.mkdir(logPath)
  // 写入日志文件
  return path.join(logPath, formatFileName(date, type));
}

function getFd(id, data, callback) {
  callback(logFile(data.env, data.t, id, new Date()));
}

const _datas = {};

setInterval(function () {
  for (var key in _datas) {
    var element = _datas[key];
    if (element.length == 0) delete _datas[key];
    else {
      _datas[key] = [];
      fs.appendFile(key, element.join(''), 'utf8', function (err) {
        if (err) console.error(err);
      });
    }
  }
}, 2000);

module.exports = function (data) {
  getFd(data.moonid, data, function (fd) {
    if (!_datas[fd]) _datas[fd] = [];
    _datas[fd].push(`${dateFormat()} ${JSON.stringify(data)}\n`)
  })
}